package com.ygp.asyn.util;

import com.ygp.asyn.entity.ZipFile;
import com.ygp.asyn.enums.FileTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import sun.misc.IOUtils;

import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.UUID;

@Slf4j
public class FileUtils {

        private static final String ZIP = ".zip";
        private static final String XLSX = ".xlsx";

        public static String addZip(String fileName) {
            return fileName + ZIP;
        }


        public static String addXLSX(String fileName) {
            return fileName + XLSX;
        }

        public static String addMark(String fileName, Object mark) {
            return fileName + "_" + String.valueOf(mark);
        }

        /**
         * 删除所有后缀；
         *
         * @param fileName ；
         * @return ；
         */
        public static String removeAllExtension(String fileName) {
            if (StringUtils.isBlank(fileName) || !fileName.contains(".")) {
                return fileName;
            }
            return fileName.split("\\.")[0];
        }

        /**
         * 删除所有指定的后缀
         *
         * @param fileName ；
         * @param type     ；
         * @return ；
         */
        public static String removeExtension(String fileName, FileTypeEnum type) {
            if (StringUtils.isBlank(fileName)) {
                return fileName;
            }
            return fileName.replaceAll(type.getExtension(), "");
        }

        /**
         * 添加指定后缀；
         *
         * @param fileName ；
         * @param type     ；
         * @return ；
         */
        public static String addExtension(String fileName, FileTypeEnum type) {
            if (StringUtils.isBlank(fileName)) {
                return fileName;
            }
            return fileName + type.getExtension();
        }


        /**
         * 文件名添加唯一标识；
         *
         * @param fileName ；
         * @return ；
         */
        public static String addUUID(String fileName) {
            if (fileName == null) {
                return fileName;
            }
            String uuid = UUID.randomUUID().toString().replace("-", "");
            String[] split = fileName.split("\\.");
            split[0] += ("_" + uuid);
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < split.length; i++) {
                builder.append(split[i]);
                if (i < split.length - 1) {
                    builder.append(".");
                }
            }
            return builder.toString();
        }


        public static void closeStream(Closeable... streams) {
            for (Closeable stream : streams) {
                if (stream == null) {
                    continue;
                }
                try {
                    stream.close();
                } catch (Exception e) {
                    log.error("closeStream error:", e);
                }
            }
        }


        public static void setNull(Object... objs) {
            for (Object obj : objs) {
                obj = null;
            }
        }

        /**
         * 压缩为集合
         *
         * @param map ；
         * @return ；
         */
        public static InputStream byOutToZipIn(Map<String, ByteArrayOutputStream> map) {
            return ZipFile.byOutToZipIn(map);
        }

    }


